0 CpxTRS
↳1 TrsToWeightedTrsProof (BOTH BOUNDS(ID, ID), 0 ms)
↳2 CpxWeightedTrs
↳3 TypeInferenceProof (BOTH BOUNDS(ID, ID), 0 ms)
↳4 CpxTypedWeightedTrs
↳5 CompletionProof (UPPER BOUND(ID), 0 ms)
↳6 CpxTypedWeightedCompleteTrs
↳7 NarrowingProof (BOTH BOUNDS(ID, ID), 0 ms)
↳8 CpxTypedWeightedCompleteTrs
↳9 CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID), 0 ms)
↳10 CpxRNTS
↳11 InliningProof (UPPER BOUND(ID), 119 ms)
↳12 CpxRNTS
↳13 SimplificationProof (BOTH BOUNDS(ID, ID), 0 ms)
↳14 CpxRNTS
↳15 CpxRntsAnalysisOrderProof (BOTH BOUNDS(ID, ID), 0 ms)
↳16 CpxRNTS
↳17 IntTrsBoundProof (UPPER BOUND(ID), 233 ms)
↳18 CpxRNTS
↳19 IntTrsBoundProof (UPPER BOUND(ID), 36 ms)
↳20 CpxRNTS
↳21 ResultPropagationProof (UPPER BOUND(ID), 0 ms)
↳22 CpxRNTS
↳23 IntTrsBoundProof (UPPER BOUND(ID), 252 ms)
↳24 CpxRNTS
↳25 IntTrsBoundProof (UPPER BOUND(ID), 92 ms)
↳26 CpxRNTS
↳27 FinalProof (⇔, 0 ms)
↳28 BOUNDS(1, n^1)
dbl(S(0), S(0)) → S(S(S(S(0))))
save(S(x)) → dbl(0, save(x))
save(0) → 0
dbl(0, y) → y
dbl(S(0), S(0)) → S(S(S(S(0)))) [1]
save(S(x)) → dbl(0, save(x)) [1]
save(0) → 0 [1]
dbl(0, y) → y [1]
dbl(S(0), S(0)) → S(S(S(S(0)))) [1]
save(S(x)) → dbl(0, save(x)) [1]
save(0) → 0 [1]
dbl(0, y) → y [1]
dbl :: 0:S → 0:S → 0:S S :: 0:S → 0:S 0 :: 0:S save :: 0:S → 0:S |
(a) The obligation is a constructor system where every type has a constant constructor,
(b) The following defined symbols do not have to be completely defined, as they can never occur inside other defined symbols:
none
(c) The following functions are completely defined:
save
dbl
dbl(v0, v1) → 0 [0]
Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules:
The TRS has the following type information:
Rewrite Strategy: INNERMOST |
Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules:
The TRS has the following type information:
Rewrite Strategy: INNERMOST |
0 => 0
dbl(z, z') -{ 1 }→ y :|: y >= 0, z = 0, z' = y
dbl(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
dbl(z, z') -{ 1 }→ 1 + (1 + (1 + (1 + 0))) :|: z = 1 + 0, z' = 1 + 0
save(z) -{ 2 }→ dbl(0, dbl(0, save(x'))) :|: x' >= 0, z = 1 + (1 + x')
save(z) -{ 2 }→ dbl(0, 0) :|: z = 1 + 0
save(z) -{ 1 }→ 0 :|: z = 0
dbl(z, z') -{ 1 }→ 1 + (1 + (1 + (1 + 0))) :|: z = 1 + 0, z' = 1 + 0
dbl(z, z') -{ 1 }→ y :|: y >= 0, z = 0, z' = y
dbl(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
dbl(z, z') -{ 1 }→ y :|: y >= 0, z = 0, z' = y
dbl(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
dbl(z, z') -{ 1 }→ 1 + (1 + (1 + (1 + 0))) :|: z = 1 + 0, z' = 1 + 0
save(z) -{ 3 }→ y :|: z = 1 + 0, y >= 0, 0 = 0, 0 = y
save(z) -{ 2 }→ dbl(0, dbl(0, save(x'))) :|: x' >= 0, z = 1 + (1 + x')
save(z) -{ 1 }→ 0 :|: z = 0
save(z) -{ 2 }→ 0 :|: z = 1 + 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1
dbl(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
dbl(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
dbl(z, z') -{ 1 }→ 1 + (1 + (1 + (1 + 0))) :|: z = 1 + 0, z' = 1 + 0
save(z) -{ 3 }→ y :|: z = 1 + 0, y >= 0, 0 = 0, 0 = y
save(z) -{ 2 }→ dbl(0, dbl(0, save(z - 2))) :|: z - 2 >= 0
save(z) -{ 1 }→ 0 :|: z = 0
save(z) -{ 2 }→ 0 :|: z = 1 + 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1
{ dbl } { save } |
dbl(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
dbl(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
dbl(z, z') -{ 1 }→ 1 + (1 + (1 + (1 + 0))) :|: z = 1 + 0, z' = 1 + 0
save(z) -{ 3 }→ y :|: z = 1 + 0, y >= 0, 0 = 0, 0 = y
save(z) -{ 2 }→ dbl(0, dbl(0, save(z - 2))) :|: z - 2 >= 0
save(z) -{ 1 }→ 0 :|: z = 0
save(z) -{ 2 }→ 0 :|: z = 1 + 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1
dbl(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
dbl(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
dbl(z, z') -{ 1 }→ 1 + (1 + (1 + (1 + 0))) :|: z = 1 + 0, z' = 1 + 0
save(z) -{ 3 }→ y :|: z = 1 + 0, y >= 0, 0 = 0, 0 = y
save(z) -{ 2 }→ dbl(0, dbl(0, save(z - 2))) :|: z - 2 >= 0
save(z) -{ 1 }→ 0 :|: z = 0
save(z) -{ 2 }→ 0 :|: z = 1 + 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1
dbl: runtime: ?, size: O(n1) [3 + z'] |
dbl(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
dbl(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
dbl(z, z') -{ 1 }→ 1 + (1 + (1 + (1 + 0))) :|: z = 1 + 0, z' = 1 + 0
save(z) -{ 3 }→ y :|: z = 1 + 0, y >= 0, 0 = 0, 0 = y
save(z) -{ 2 }→ dbl(0, dbl(0, save(z - 2))) :|: z - 2 >= 0
save(z) -{ 1 }→ 0 :|: z = 0
save(z) -{ 2 }→ 0 :|: z = 1 + 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1
dbl: runtime: O(1) [1], size: O(n1) [3 + z'] |
dbl(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
dbl(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
dbl(z, z') -{ 1 }→ 1 + (1 + (1 + (1 + 0))) :|: z = 1 + 0, z' = 1 + 0
save(z) -{ 3 }→ y :|: z = 1 + 0, y >= 0, 0 = 0, 0 = y
save(z) -{ 2 }→ dbl(0, dbl(0, save(z - 2))) :|: z - 2 >= 0
save(z) -{ 1 }→ 0 :|: z = 0
save(z) -{ 2 }→ 0 :|: z = 1 + 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1
dbl: runtime: O(1) [1], size: O(n1) [3 + z'] |
dbl(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
dbl(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
dbl(z, z') -{ 1 }→ 1 + (1 + (1 + (1 + 0))) :|: z = 1 + 0, z' = 1 + 0
save(z) -{ 3 }→ y :|: z = 1 + 0, y >= 0, 0 = 0, 0 = y
save(z) -{ 2 }→ dbl(0, dbl(0, save(z - 2))) :|: z - 2 >= 0
save(z) -{ 1 }→ 0 :|: z = 0
save(z) -{ 2 }→ 0 :|: z = 1 + 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1
dbl: runtime: O(1) [1], size: O(n1) [3 + z'] save: runtime: ?, size: O(n1) [3·z] |
dbl(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
dbl(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
dbl(z, z') -{ 1 }→ 1 + (1 + (1 + (1 + 0))) :|: z = 1 + 0, z' = 1 + 0
save(z) -{ 3 }→ y :|: z = 1 + 0, y >= 0, 0 = 0, 0 = y
save(z) -{ 2 }→ dbl(0, dbl(0, save(z - 2))) :|: z - 2 >= 0
save(z) -{ 1 }→ 0 :|: z = 0
save(z) -{ 2 }→ 0 :|: z = 1 + 0, v0 >= 0, v1 >= 0, 0 = v0, 0 = v1
dbl: runtime: O(1) [1], size: O(n1) [3 + z'] save: runtime: O(n1) [3 + 4·z], size: O(n1) [3·z] |